//
//  HDBBaseViewController.swift
//  HDBWeibo
//
//  Created by leidon on 2016/11/17.
//  Copyright © 2016年 BONC. All rights reserved.
//

import UIKit

class HDBBaseViewController: UIViewController {

    //自定义导航条
    lazy var navigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: UIScreen.cz_screenWidth(), height: 64))
    //自定义导航条上的item
    lazy var naviItem = UINavigationItem()
    
    //tableView
    var tableView : UITableView?
    
    
    /// 给BaseView的versionInfo传参
    var versionInfoDict:[String : String]?
    
    /// 上拉刷新标价
    var isPull : Bool = false
    
    /// 访客模式开关
    var userLogin = false
    
    var refreshController : UIRefreshControl?
    
    override func viewDidLoad() {
        super.viewDidLoad()

        setupUI()
        loadData()
        
    }
    /// 重写title的方法
    override var title: String?{
        didSet{
            naviItem.title = title
        }
    }
    
    //给tableView准备数据
    func loadData()  {
        
        //如果子类不实现任何方法，默认关闭刷新控件
        refreshController?.endRefreshing()
    }
    
    //给访客模式的登录、注册准备两个方法
    
    func loginClick() {
        print("登录按钮")
    }
    
    func registerClick() {
        print("注册按钮")
    }
    
}

//MARK: 设置Navigationbar 和 tabbleView
extension HDBBaseViewController{
    func setupUI(){
    
        view.backgroundColor = UIColor.white

        setNavigationBar()
        
        userLogin ? setTabbleView() : setVersionView()
    }
    
    /// 设置tabbleView
    @objc func setTabbleView(){
        
        tableView = UITableView(frame: view.bounds, style: .plain)
        //从navigationbar的底部开始
        view.insertSubview(tableView!, belowSubview: navigationBar)
        
        tableView?.dataSource = self
        
        tableView?.delegate = self
        
        //设置tableView的具体位置
        tableView?.contentInset = UIEdgeInsetsMake(navigationBar.bounds.height, 00, 49, 00)
        
        //因为隐藏了导航栏，所以这里要关闭自动缩紧
        automaticallyAdjustsScrollViewInsets = false
        
        //设置刷新控件
        refreshController = UIRefreshControl()
        
        //将refresh添加到tableView上
        tableView?.addSubview(refreshController!)
        
        //添加刷新数据事件
        refreshController?.addTarget(self, action: #selector(loadData), for: .valueChanged)
        
    }
    
    
    /// 设置访客模式配置
    private func setVersionView(){
        let versionView = HDBVersionView(frame: view.bounds)
        
        view.insertSubview(versionView, belowSubview: navigationBar)
        
        //打印证实，每个子控制器创建一个访客的versionView
        //1> 访客视图的设置
        print(versionView)
        versionView.versionInfo = versionInfoDict
        
        //2> 访客视图中登录、注册按钮的监听方法
        versionView.loginBtn.addTarget(self, action: #selector(loginClick), for: .touchUpInside)
        versionView.registerBtn.addTarget(self, action: #selector(registerClick), for: .touchUpInside)
        
        //3> 访客视图导航按钮的设置
        naviItem.leftBarButtonItem = UIBarButtonItem(title: "登录", style: .plain, target: self, action: #selector(loginClick))
        naviItem.rightBarButtonItem = UIBarButtonItem(title: "注册", style: .plain, target: self, action: #selector(registerClick))
        
    }
    
    /// 设置导航条
    private func setNavigationBar() {
        
        //>添加导航条
        view.addSubview(navigationBar)
        
        //>给导航条添加items
        navigationBar.items = [naviItem]
        
        //>给navbar渲染颜色
        navigationBar.barTintColor = UIColor.cz_color(withHex: 0xF6F6F6)
        
        //>那就再渲染一下文字颜色吧 Foreground 前景 title的颜色
        navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.darkGray]
        
        //>左右按钮的颜色
        navigationBar.tintColor = UIColor.orange
    }
}

//MARK: tabelView 的协议方法
extension HDBBaseViewController : UITableViewDelegate, UITableViewDataSource{
    /**
     基类只准备方法，子类负责实现
     extension 中不能重写父类方法，重写是子类的职责，extension 只负责扩充
 */
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        //最后一个
        let row = indexPath.row
        
        //最后一组
        let section = tableView.numberOfSections - 1
        
        if row < 0 || section < 0 {
            return
        }
        
        //最后一组的最后一个
        let count = tableView.numberOfRows(inSection: section)
        
        //如果是最后一组的最后一个row，同时isPull是false,就执行上拉加载动作
        if row == (count - 1) && !isPull {
            print("上拉加载")
            
            //改变标识符状态
            isPull = true
            
            //加载数据
            loadData()
        }
    }
}
